<!DOCTYPE html>
<html>
<head>
    <title>Touch Adjustment : Adjust to context menu providers - bug 94101</title>
    <script src="../resources/ahem.js"></script>
    <script src="../resources/js-test.js"></script>
    <script src="resources/touchadjustment.js"></script>
    <style>
        #sandbox {
            position: absolute;
            top: 0px;
            left: 0px;
            width: 400px;
            height: 200px;
        }
        #sandbox p {
            padding: 5px;
            font: 20px Ahem;
        }
    </style>
</head>
<body>

<script>
    function onClick() {}
</script>

<div id=sandbox>
    <p id=p0><a id=a0 href="#a0">Link with URL.</a>
    <p id=p1><span id=span0 onclick=onClick>Text with onclick handler.</span>
    <p id=p2><img id=img0 height=20 width=100 src=""></img>
</div>

<p id='description'></p>
<div id='console'></div>

<script>
    // Set up shortcut access to elements
    var e = {};
    ['sandbox', 'a0', 'span0', 'img0', 'p0', 'p1', 'p2'].forEach(function(a) {
        e[a] = document.getElementById(a);
    });

    function testDirectTouches()
    {
        // Check links can be targeted with context menu gesture.
        testTouchPointContextMenu(touchPoint(100, 35, 10), e.a0);
        // Check onclick can be targeted with activate gesture.
        testTouchPoint(touchPoint(100, 100, 10), e.span0);
        // Check onclick can not be targeted with context menu.
        testTouchPointContextMenu(touchPoint(100, 100, 10), null);
        // But that the adjusted point still hits it, if no better target is available
        var adjustedPoint = adjustTouchPointContextMenu(touchPoint(100, 100, 10));
        if (adjustedPoint) {
            shouldBeNode(document.elementFromPoint(adjustedPoint.x, adjustedPoint.y), e.span0);
        }
        // Check images can be targeted with context menu.
        testTouchPointContextMenu(offsetTouchPoint(findAbsoluteBounds(e.img0), 'center', 0, 5, 5), e.img0);
    }

    function testAdjustedTouches()
    {
        // Check we if we adjust the context menu onto the link.
        testTouchPointContextMenu(touchPoint(100, 50, 10), e.a0);
        // Check we if we do not adjust the context menu onto the onclick element.
        testTouchPointContextMenu(touchPoint(100, 70, 10), null);
        // Check the link is strongly preferred.
        testTouchPointContextMenu(touchPoint(100, 60, 20), e.a0);
        // Check adjustment onto the image.
        testTouchPointContextMenu(touchPoint(20, 140, 10), e.img0);
        // Check the image is strongly preferred for context menu gestures.
        testTouchPointContextMenu(touchPoint(20, 120, 30), e.img0);
        // But the onclick handler would be preferred for activate gestures.
        testTouchPoint(touchPoint(20, 120, 30), e.span0);
    }

    function runTests()
    {
        if (window.testRunner && window.internals && internals.touchNodeAdjustedToBestContextMenuNode) {
            description('Test touch adjustment for context-menu gestures.');
            // Set editing-behaviour to win, so context-menu gesture does not trigger selections.
            internals.settings.setEditingBehavior('win');
            testDirectTouches();
            testAdjustedTouches();
            e.sandbox.style.display = 'none';
        }
    }
    runTests();
</script>


</body>
</html>
